
// /**分割线
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * 2020-03-13对视频播放器进行学习，目前已完成的功能
//    * 1）竖屏
//    * 1. 竖屏UI
//    * 2. 竖屏时拖动进度条
//    * 3. 竖屏时的各项功能以及按钮功能基本已完成
//    * 4. 缓冲进度显示
//    * 5. 直播UI
//    * 6. 其它： 播放完成后UI、播放出错时提示、加载中提示、视频删除时提示
//    * 
//    * 2）横屏
//    * 1. 横屏UI
//    * 2. 横屏时拖动进度条
//    * 3. 横屏时的各项功能以及按钮功能基本已完成
//    * 4. 缓冲进度显示
//    * 5. 直播UI
//    * 6. 其它： 播放完成后UI、播放出错时提示、加载中提示、视频删除时提示
//    * 
//    * 3）弹幕
//    * 1. 横屏弹幕已完成
//    * 2. 竖屏没有做
//    * 3. 弹幕的速度做一下说明：velocity这个参数是控制弹幕的速度，但是参数有一个字数长短(字数长短会影响这一条弹幕的宽度)问题，所以如果要改这一块就要改源码
//    * 
//    * 4) APP进入后台播放自动暂停
//    * 
//    * 至此整个视频功能已全部完成，后面还有一个广告功能，一个网络切换功能没有做，估计也用不到这块了
//    * 另外需要说明一下，目前这里用到了弹幕，但是弹幕没有封装，以后技术好了再弄这一块，所以所有的代码都在这一个文件里面。
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    */

// import 'dart:async';
// import 'dart:convert';

// // import 'package:barrage/barrage.dart';
// import 'package:moonplay/common/app_common.dart';
// import 'package:moonplay/common/event_bus_utils.dart';
// import 'package:moonplay/model/video_detail_model.dart';
// import 'package:moonplay/pages/common_page/common_text_page.dart';
// // import 'package:moonplay/common/common_color.dart';
// import 'package:moonplay/widgets/common_slider.dart';
// import 'package:moonplay/widgets/popup_window.dart';
// import 'package:flutter/material.dart';
// import 'package:fijkplayer/fijkplayer.dart';
// import 'package:flustars/flustars.dart';
// import 'package:flutter/services.dart';
// import 'package:flutter_spinkit/flutter_spinkit.dart';
// import 'package:get/get.dart';
// import 'package:logger/logger.dart';
// import 'package:screen/screen.dart';
// import 'package:wakelock/wakelock.dart';

// // GlobalKey<_MyVideoPageState> childKey = GlobalKey();

// class MyVideoPage extends StatefulWidget {
//   final String url;         //视频URL
//   final bool isLive;        //是否直播
//   final Function nextEpisode;
//   final String title;
//   final bool isNext;
//   final int setNum;         //播放集数
//   final int videoVolume;    //播放进度
//   final VideoDetailModel data;

//   const MyVideoPage({Key key, this.url, this.isLive, this.nextEpisode, this.title, this.isNext, this.data, this.setNum, this.videoVolume}) : super(key: key);
  
//   @override
//   _MyVideoPageState createState() => _MyVideoPageState();
// }

// //页面本身如果想监听APP进入后台就把这里放开（改成） class _MyVideoPageState extends State<MyVideoPage> with WidgetsBindingObserver{
// class _MyVideoPageState extends State<MyVideoPage> with WidgetsBindingObserver {
//   _MyVideoPageState();
//   Orientation get orientation => MediaQuery.of(context).orientation;
//   GlobalKey _distinctKey = GlobalKey();
//   GlobalKey _speedKey = GlobalKey();
  
//   final FijkPlayer player = FijkPlayer();

//   var logger = Logger();

//   bool _autoplay = true;                //自动播放
//   bool _isDanmu = true;                 //弹幕开关
//   bool _isGesture = true;               //手势开关
//   bool _isMute = false;                 //是否静音播放
//   bool _isFull = true;                  //是否全屏(只用来处理全屏和非全屏用，其它时候请不要使用此参数，比如有这么个需求：刚进入播放时就直接全屏，这种需求就要通过其它办法去解决)
//   bool _playing;                        //是否播放中
//   dynamic _videoState;                  //播放器状态
//   bool _showControl = false;            //显示播放控件
//   bool _isCompleted = false;            //是否播放结束
//   double _progress_video = 0;           //播放进度条
//   double _buffer_progress_video = 0;    //缓冲进度条
//   String _videoDuration = "--:--";      //视频总时长
//   int _totalDuration = 0;               //视频总时长(单位秒)，用处：计算进度条时使用，无其它用处
//   bool _isClear = false;                //选择清晰度是否打开
//   bool _fullShowControl = false;        //全屏时播放控件显示
//   bool _isVideoError = false;           //播放错误
//   bool _isVideoDel = false;             //视频被删除
//   bool _isLoading = true;               //视频加载中
//   int _currentTimeInMs = 0;

//   //计时器相关参数
//   Timer _timer;
//   int _countdownTime = 0;

//   StreamSubscription _currentPosSubs;
//   Duration _currentPos;
//   // 是否数据不足播放出现卡顿，正在缓冲中。
//   bool _isBuffering;
//   StreamSubscription _bufferStateSubs;
//   // 当前缓冲位置
//   Duration _bufferPos;
//   StreamSubscription _bufferPosSubs;

//   /**当前播放的进度 */
//   int _inHours = 0;
//   String _inMinutes = '00';
//   String _inSeconds = '00';
//   int _inMilliseconds = 0;

//   /**滑动手势进度参数start */
//   int _startCoordinate;                 //手势起点坐标
//   double _endCoordinate;                //手势结束坐标
//   int _slideLength;                     //滑动长度
//   int _multiple = 100;                  //坐标倍数
//   bool _goOrQuit = true;                //快进还是快退

//   /**滑动手势进度参数end */
  

//   /**滑动手势声音参数start */
//   double _soundX = 180.0;               //滑动时开始点距离左边距离(如果手指触摸屏幕的点小于_soundX，则表示在有效范围内，可以进行左边的滑动动作)
//   int _startCoordinateY;                //手指触摸屏幕起点Y坐标
//   double _soundProgress = 0.0;          //声音进度条
//   int _videoVolume = 0;                 //
//   double _endVolume = 0.0;              //最后滑动后的声音大小
//   /**滑动手势声音参数end */

//   /**滑动手势亮度参数start */
//   double _lightProgress = 0.0;          //亮度进度条
//   int _videoLight = 0;                  //
//   double _endLight = 0.0;               //最后滑动后的亮度大小
//   /**滑动手势亮度参数end */
  
//   int _isType = 9;                      //判断当前是哪种滑动状态

//   StreamSubscription _eventPauseVideo;

//   //记录播放历史计时器相关参数
//   Timer _saveTimer;
//   int _saveCountTime = 10;

//   //全屏时获取系统时间
//   String hourTime;
//   String minTime;
  

//   @override
//   void initState() {
//     super.initState();
//     Wakelock.enable();

//     LogUtil.e("接收到传过来的播放URL: ${widget.url}");

//     startPlay(widget.url);
//     player.addListener(_playerValueChanged);
//     if(!widget.isLive) {
//       initFijkplay();
//     }

//     //页面本身如果想监听APP进入后台就把这里放开
//     WidgetsBinding.instance.addObserver(this);

//     //这里是监听main里面的APP进入后台
//     // eventBus.on<AppHide>().listen((event) async { 
//     //   player.pause();
//     // });

//     _eventPauseVideo = eventBus.on<PauseVideo>().listen((event) {
//       player.pause();
//     });

//     //开始缓存历史记录函数倒计时
//     startRecordTimer();
//   }

//   @override
//   void dispose() {
//     //页面本身如果想监听APP进入后台就把这里放开
//     WidgetsBinding.instance.removeObserver(this);
//     // _danmuTimer?.cancel();
//     if(_timer!=null){
//       _timer.cancel();
//     }
//     if(_saveTimer!=null){
//       _saveTimer.cancel();
//     }
//     player.removeListener(_playerValueChanged);
//     _currentPosSubs?.cancel();
//     player.release();
//     Wakelock.disable();
//     super.dispose();
//   }

//   //页面本身如果想监听APP进入后台就把这里放开
//   @override
//   void didChangeAppLifecycleState(AppLifecycleState state) {
//     switch (state) {
//       case AppLifecycleState.inactive: // 处于这种状态的应用程序应该假设它们可能在任何时候暂停。
//         player.pause();
//         break;
//       case AppLifecycleState.resumed:// 应用程序可见，前台
//         break;
//       case AppLifecycleState.paused: // 应用程序不可见，后台
//         player.pause();
//         break;
//       case AppLifecycleState.detached:
        
//         break;
//     }
//   }

//   /**监听播放器的实时数据 */
//   void initFijkplay(){
//     /**~~~~~~~~~~~~~~~~~~~~~~~ */
//     _currentPos = player.currentPos;
//     _currentPosSubs = player.onCurrentPosUpdate.listen((res) {
//       // logger.d('秒：${res.inSeconds}, 时：${res.inHours}, 分：${res.inMinutes}');
//       setState(() {
//         // _currentPos = res;
//         _inMilliseconds = res.inMilliseconds;
//         _inHours = res.inHours;
//         _inMinutes = res.inMinutes < 10 ? '0'+res.inMinutes.toString() : res.inMinutes.toString();
//         int _calcuMin = res.inMinutes;      //计算用分钟时间，其它地方无用
//         /**计算秒 */
//         if(_calcuMin > 0) {
//           _inSeconds = ((res.inSeconds) - _calcuMin * 60) < 10 ? '0'+(res.inSeconds - _calcuMin * 60).toString() : (res.inSeconds - _calcuMin * 60).toString();
//         } else {
//           _inSeconds = res.inSeconds < 10 ? '0'+res.inSeconds.toString() : res.inSeconds.toString();
//         }
        
//         if(_totalDuration != null && _totalDuration != 0) {
//           _progress_video = double.parse(((res.inSeconds / _totalDuration) * 100).toStringAsFixed(2));
//         }

//         _currentTimeInMs = res.inMilliseconds;
//       });
//     });
//     /**~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
//     //缓冲进度
//     _bufferPos = player.bufferPos;
//     _bufferPosSubs = player.onBufferPosUpdate.listen((res) {
//       setState(() {
//         _buffer_progress_video = double.parse(((res.inSeconds / _totalDuration) * 100).toStringAsFixed(2));
//       });
//     });
//     /**~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
//     _isBuffering = player.isBuffering;
//     _bufferStateSubs = player.onBufferStateUpdate.listen((res) {
//       setState(() {
//         _isLoading = res ? true : false;
//       });
//     });
//   }

//   Future _playerValueChanged() async {
//     FijkValue value = player.value;

//     if(value.state == FijkState.prepared) {
//       //缓冲已完成，可以播放
//       setState(() {
//         _isLoading = false;
//       });

//       if(widget.videoVolume != 0) {
//         player.seekTo(widget.videoVolume);
//       }
      
//       if(SpUtil.getInt('isJump') == 1 && seekTime() != 0) {
//         player.seekTo(seekTime());
//       }
//     }

//     if(value.state == FijkState.started) {
//       setState(() {
//         _isCompleted = false;
//         _isVideoError = false;
//       });
//     }
    
//     bool playing = (value.state == FijkState.started);
//     if (playing != _playing) {
//       setState(() {
//         _playing = playing;
//       });
//     }

//     if(value.state == FijkState.paused){
//       logger.d('播放暂停');
//     }

//     if(value.state == FijkState.completed){
//       logger.d('播放完成了');
//       _videoCompleted();
//     }

//     if(value.state == FijkState.error){
//       logger.d('播放错误');
//       setState(() {
//         _isLoading = false;
//         _isVideoError = true;
//       });
//     }

//     if(mounted) {
//       setState((){
//         _videoState = value.state;
//         _isFull = value.fullScreen != null ? value.fullScreen : false;
//         _videoDuration = _durationCall(value.duration);
//         _totalDuration = value.duration.inSeconds;
//       });
//     }
//   }

//   /**解析视频时长函数 */
//   dynamic _durationCall(value){
//     String _call;
//     String _strMin;
//     String _strSec;
//     int _callMin = value.inMinutes;         //分
//     int _callSec = value.inSeconds;         //秒
//     _strMin = _callMin < 10 ? '0' + _callMin.toString() : _callMin.toString();      //计算分钟
//     if(_callMin > 0) {    //计算秒
//       _strSec = (_callSec - _callMin*60) < 10 ? '0' + (_callSec - _callMin*60).toString() : (_callSec - _callMin*60).toString();
//     } else {
//       _strSec = _callSec.toString();
//     }
//     _call = _strMin + ':' + _strSec;
//     return _call;
//   }

//   /**
//    * 播放器初始化
//    * showCover播放器自动播放第一帧然后暂停，这样播放器就有封面了，也可以有第二种办法，手动设置封面（查找cover参数，设置cover参数）
//    */
//   void startPlay(url) async {
//     // widget.url = "https://vdept.bdstatic.com/5a42504e5a7965435a6452794a686b77/436e396277333635/693f5eba61ee02eb84be6e0948760bb262ce391005589061c92db59d1f45dd3413bb31f02ff3d5661fd6f864ad3417e9.mp4?auth_key=1584200171-0-0-4fcfec1d4a5f4a782b058ce55479d1c9";
//     // widget.url = "rtmp://58.200.131.2:1935/livetv/hunantv";
//     await player.setOption(FijkOption.playerCategory, "enable-accurate-seek", 1); 
//     await player.setOption(FijkOption.hostCategory, "request-audio-focus", 1);
//     if(_isMute) {
//       player.setVolume(0.0);
//     }
//     player.setDataSource(url, autoPlay: _autoplay, showCover: true).catchError((e) {
//       print('初始化出错了');
//     });
//   }

//   //切换播放源
//   switchPlayData({String url}) async {
//     await player.reset(); // 这个方法调用后,会释放所有原生资源,但重新设置dataSource依然可用
//     player.setDataSource(url, autoPlay: _autoplay, showCover: true).catchError((e) {
//       print('初始化出错了');
//     });
//   }

//   resetVideo(){
//     player.reset();
//   }

//   /**
//    * 非全屏时计时器方法，这里将全屏和非全屏分开了
//    */
//   void startCountdownTimer() {
//     const oneSec = const Duration(seconds: 1);
//     var callback = (timer) => {
//       setState(() {
//         if (_countdownTime < 1) {
//           _showControl = false;
//           _timer.cancel();
//           _timer = null;
//         } else {
//           _countdownTime = _countdownTime - 1; 
//         } 
//       }) 
//     };
//     _timer = Timer.periodic(oneSec, callback);
//   }

//   /**
//    * 开始计时
//    */
//   void startCoundTime(type){
//     //type == 1时为单击播放器，如果控制窗口开启则将之关闭，否则开启
//     if(type == 1) {
//       if (_timer != null) {
//         //如果倒计时存在，则取消计时器，关闭控制窗口, 将_timer赋值为null
//         setState(() {
//           _showControl = false;
//         });
//         _timer.cancel();
//         _timer = null;
//       } else {
//         //如果倒计时不存在，则开启倒计时
//         setState(() {
//           _countdownTime = 1;
//           _showControl = true;
//         });
//         //开始倒计时
//         startCountdownTimer();
//       }
//     } else {
//       if (_timer != null) {
//         _timer.cancel();
//       }
//       setState(() {
//         _countdownTime = 1;
//         _showControl = true;
//       });
//       //开始倒计时
//       startCountdownTimer();
//     }
//   }

//   /**
//    * 全屏时计时器方法，需要注意一下
//    */
//   void startCountdownTimerFull() {
//     const oneSec = const Duration(seconds: 1);
//     var callback = (timer) => {
//       setState(() {
//         if (_countdownTime < 1) {
//           //隐藏状态栏
//           // SystemChrome.setEnabledSystemUIOverlays([]);
//           if(_isClear) {
//             Navigator.of(context).pop();
//           }
//           _isClear = false;
//           _fullShowControl = false;
//           _timer.cancel();
//           _timer = null;
//         } else {
//           _countdownTime = _countdownTime - 1; 
//         } 
//       }) 
//     };
//     _timer = Timer.periodic(oneSec, callback);
//   }

//   /**
//    * 全屏开始计时
//    */
//   void startCoundTimeFull(type){
//     //type == 1时为单击播放器，如果控制窗口开启则将之关闭，否则开启
//     if(type == 1) {
//       if (_timer != null) {
//         //如果倒计时存在，则取消计时器，关闭控制窗口, 将_timer赋值为null
//         setState(() {
//           _fullShowControl = false;
//         });
//         _timer.cancel();
//         _timer = null;
//         // SystemChrome.setEnabledSystemUIOverlays([]);
//       } else {
//         //如果倒计时不存在，则开启倒计时
//         setState(() {
//           _countdownTime = 1;
//           _fullShowControl = true;
//           // SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
//         });
//         //开始倒计时
//         startCountdownTimerFull();
//       }
//     } else {
//       if (_timer != null) {
//         _timer.cancel();
//       }
//       setState(() {
//         //设置计时器时间，设置全屏播放控制器显示，设置状态栏显示
//         _countdownTime = 1;
//         _fullShowControl = true;
//         // SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
//       });
//       //开始倒计时
//       startCountdownTimerFull();
//     }
//   }

//   @override
//   Widget build(BuildContext context) {
//     return SafeArea(
//       child: Container(
//         // height: 200,
//         child: Stack(
//           children: <Widget>[
//             Positioned(
//               top: 0,
//               left: 0,
//               right: 0,
//               bottom: 0,
//               child: Container(
//                 alignment: Alignment.center,
//                 child: FijkView(
//                   width: double.infinity,
//                   height: double.infinity,
//                   //color背景色
//                   color: Colors.black,
//                   //fit裁剪和填充
//                   fit: FijkFit.cover,
//                   //cover可当作封面
//                   // cover: NetworkImage('http://file02.16sucai.com/d/file/2014/0829/372edfeb74c3119b666237bd4af92be5.jpg'),
//                   player: player,
//                   panelBuilder: (FijkPlayer player, FijkData fijkData, BuildContext context, Size viewSize, Rect texturePos) {
//                     return Stack(
//                       children: <Widget>[
//                         !_isFull
//                         ? _notFullVideo()
//                         : _fullVideoUI(),
//                       ],
//                     );
//                     },
//                   ),
//               ),
//             ),
//           ],
//         ),
//       ),
//     );
//   }

//   Widget _notFullVideo(){
//     return Container(
//       width: double.infinity,
//       height: double.infinity,
//       color: Colors.transparent,
//       child: Stack(
//         children: <Widget>[
//           Positioned(
//             top: 0,
//             left: 0,
//             right: 0,
//             bottom: 0,
//             child: GestureDetector(
//               behavior: HitTestBehavior.opaque,
//               onTap: (){
//                 //当视频播放完成、播放出错、视频被删除、视频正在加载(缓冲中)，此时单击或双击屏幕不起作用
//                 //  || _isLoading
//                 if(_isCompleted || _isVideoError || _isVideoDel)return;
//                 startCoundTime(1);
//               },
//               onDoubleTap: (){
//                 //当视频播放完成、播放出错、视频被删除、视频正在加载(缓冲中)，此时单击或双击屏幕不起作用
//                 if(_isCompleted || _isVideoError || _isVideoDel || _isLoading)return;
//                 _playing ? player.pause() : player.start();
//               },
//               child: Container(
//                 width: double.infinity,
//                 height: double.infinity,
//                 color: Colors.transparent,
//                 child: _showControl
//                 ? Container(
//                   color: Color.fromARGB(100, 0, 0, 0),
//                   child: Stack(
//                     children: <Widget>[
//                       Positioned(
//                         top: 0,
//                         right: 0,
//                         child: GestureDetector(
//                           behavior: HitTestBehavior.translucent,
//                           onTap: (){
//                             Logger().d('点击更多');
//                           },
//                           child: Container(
//                             width: ScreenUtil().getWidthPx(120),
//                             height: ScreenUtil().getHeightPx(100),
//                             padding: EdgeInsets.only(right: ScreenUtil().getWidthPx(30)),
//                             alignment: Alignment.centerRight,
//                             color: Colors.transparent,
//                             child: Icon(IconData(0xe73a, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(21)),
//                           ),
//                         ),
//                       ),
//                       Positioned(
//                         top: 0,
//                         bottom: 0,
//                         left: 0,
//                         right: 0,
//                         child: _videoPlayOrPause()
//                       ),
//                       Positioned(
//                         bottom: 0,
//                         left: 0,
//                         right: 0,
//                         child: Container(
//                           height: ScreenUtil().getHeightPx(80),
//                           padding: EdgeInsets.fromLTRB(!widget.isLive ? ScreenUtil().getWidthPx(30) : 0, 0, 0, 0),
//                           child: Row(
//                             children: <Widget>[
//                               Expanded(
//                                 flex: 5,
//                                 child: 
//                                 !widget.isLive ?
//                                 Container(
//                                   alignment: Alignment.centerLeft,
//                                   child: Text('${_inMinutes}:${_inSeconds}', style: TextStyle(color: Colors.white,fontSize: 14),),
//                                 )
//                                 : GestureDetector(
//                                   behavior: HitTestBehavior.translucent,
//                                   onTap: (){
//                                     _playing ? player.pause() : player.start();
//                                   },
//                                   child: Container(
//                                     margin: EdgeInsets.only(bottom: ScreenUtil().getHeightPx(6)),
//                                     alignment: Alignment.center,
//                                     child: Icon(IconData(_playing ? 0xe6cf : 0xe6ce, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(18)),
//                                   ),
//                                 ),
//                               ),
//                               Expanded(
//                                 flex: 22,
//                                 child: !widget.isLive ? Container(
//                                   child: _progressView()
//                                 ) : Container(),
//                               ),
//                               Expanded(
//                                 flex: 5,
//                                 child: !widget.isLive ? Container(
//                                   alignment: Alignment.centerRight,
//                                   child: Text('${_videoDuration}', style: TextStyle(color: Colors.white,fontSize: 14),),
//                                 ) : Container(),
//                               ),
//                               Expanded(
//                                 flex: 5,
//                                 child: InkResponse(
//                                   // behavior: HitTestBehavior.translucent,
//                                   onTap: (){
//                                     videoFullScreen();
//                                   },
//                                   child: Container(
//                                     padding: EdgeInsets.only(right: ScreenUtil().getWidthPx(30)),
//                                     margin: EdgeInsets.only(bottom: ScreenUtil().getHeightPx(6)),
//                                     alignment: Alignment.centerRight,
//                                     color: Colors.transparent,
//                                     child: Icon(IconData(0xe660, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(18)),
//                                   ),
//                                 )
//                               ),
//                             ]
//                           )
//                         ),
//                       ),
//                     ],
//                   ),
//                 )
//                 : Container(),
//               )
//             )
//           ),
//           //播放完成
//           _isCompleted
//           ? Positioned(
//               top: 0,
//               bottom: 0,
//               left: 0,
//               right: 0,
//               child: _videoComplete()
//             )
//             : Container(),
//           //播放错误
//           Positioned(
//             top: 0,
//             bottom: 0,
//             left: 0,
//             right: 0,
//             child: _videoErrorOrDel()
//           ),
//           //加载中
//           _isLoading
//           ? Positioned(
//             top: 0,
//             bottom: 0,
//             left: 0,
//             right: 0,
//             child: Container(
//               width: 40,
//               height: 40,
//               child: SpinKitDualRing(color: Colors.white54,size: 30, lineWidth: 2),
//             )
//           )
//           : Container(),
//           Positioned(
//             top: 0,
//             left: 0,
//             child: GestureDetector(
//               behavior: HitTestBehavior.translucent,
//               onTap: (){
//                 Get.back();
//               },
//               child: Container(
//                 width: ScreenUtil().getWidthPx(140),
//                 height: ScreenUtil().getHeightPx(140),
//                 padding: EdgeInsets.only(bottom: ScreenUtil().getHeightPx(40), left: ScreenUtil().getWidthPx(20)),
//                 alignment: Alignment.centerLeft,
//                 color: Colors.transparent,
//                 child: Icon(IconData(0xe632, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(22)),
//               ),
//             )
//           ),
//           //缓冲进度
//           !widget.isLive
//           ? Positioned(
//             left: 0,
//             right: 0,
//             bottom: 0,
//             child: !_showControl ? _bufferprogressBottomView() : Text(''),
//           )
//           : Container(),
//           //播放进度
//           !widget.isLive
//           ? Positioned(
//             left: 0,
//             right: 0,
//             bottom: 0,
//             child: !_showControl ? _progressBottomView() : Text(''),
//           )
//           : Container()
//         ],
//       ),
//     );
//   }

//   //播放中或暂停
//   Widget _videoPlayOrPause(){
//     return Container(
//       alignment: Alignment.center,
//       child: GestureDetector(
//         behavior: HitTestBehavior.translucent,
//         onTap: (){
//           _playing ? player.pause() : player.start();
//         },
//         child: Container(
//           width: ScreenUtil().getWidthPx(90),
//           height: ScreenUtil().getWidthPx(90),
//           decoration: BoxDecoration(
//             color: Color.fromARGB(100, 0, 0, 0),
//             borderRadius: BorderRadius.all(Radius.circular(45)),
//           ),
//           child: Icon(IconData(_playing ? 0xe674 : 0xe78e, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(22)),
//         ),
//       ),
//     );
//   }

//   //播放错误或者视频被删除
//   Widget _videoErrorOrDel(){
//     if(_isVideoDel) {
//       return Container(
//         alignment: Alignment.center,
//         child: Text('视频已删除', style: TextStyle(color: Colors.white70, fontSize: 14)),
//       );
//     } else if(_isVideoError) {
//       return Container(
//         alignment: Alignment.center,
//         child: GestureDetector(
//           behavior: HitTestBehavior.translucent,
//           onTap: (){
//             setState(() {
//               _isLoading = true;
//               _isVideoError = false;
//             });
//             player.reset();
//             startPlay(widget.url);
//             player.start();
//           },
//           child: Column(
//             mainAxisAlignment: MainAxisAlignment.center,
//             children: <Widget>[
//               Text('哦豁,出错了~~', style: TextStyle(color: Colors.white70, fontSize: 14),),
//               Container(
//                 width: ScreenUtil().getWidthPx(180),
//                 height: ScreenUtil().getHeightPx(80),
//                 // color: Colors.red,
//                 child: Row(
//                   children: <Widget>[
//                     Icon(IconData(0xe8c4, fontFamily: Constants.IconFontFamily),color: Colors.white70 ,size: ScreenUtil().getSp(18)),
//                     SizedBox(width: 5),
//                     Text('点击重试', style: TextStyle(color: Colors.white70, fontSize: 14))
//                   ],
//                 ),
//               )
//             ],
//           ),
//         ),
//       );
//     } else {
//       return Container();
//     }
//   }

//   //播放状态(播放完成)非全屏
//   Widget _videoComplete(){
//     return Container(
//       alignment: Alignment.center,
//       child: GestureDetector(
//         behavior: HitTestBehavior.translucent,
//         onTap: (){
//           player.start();
//         },
//         child: Column(
//           mainAxisAlignment: MainAxisAlignment.center,
//           children: <Widget>[
//             Container(
//               width: ScreenUtil().getWidthPx(90),
//               height: ScreenUtil().getWidthPx(90),
//               decoration: BoxDecoration(
//                 color: Color.fromARGB(100, 0, 0, 0),
//                 borderRadius: BorderRadius.all(Radius.circular(45)),
//               ),
//               child: Icon(IconData(0xe782, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(22)),
//             ),
//             SizedBox(height: 2),
//             Text('重播',style: TextStyle(color: Colors.white, fontSize: 14.0),)
//           ],
//         )
//       ),
//     );
//   }

//   //自定义播放控件里面的进度条（不是最底下的进度条）
//   Widget _progressView(){
//     return SliderTheme( //自定义风格
//       data: SliderTheme.of(context).copyWith(
//         activeTrackColor: Color(0xfff85959), //进度条滑块左边颜色
//         inactiveTrackColor: Color.fromARGB(100, 255, 255, 255), //进度条滑块右边颜色
//         trackShape: RoundSliderTrackShape(radius: 5),//进度条形状,这边自定义两头显示圆角
//         thumbColor: Colors.white, //滑块颜色
//         overlayColor: Color.fromARGB(100, 255, 255, 255), //滑块拖拽时外圈的颜色
//         overlayShape: RoundSliderOverlayShape(//可继承SliderComponentShape自定义形状
//           overlayRadius: 15, //滑块外圈大小
//         ),
//         thumbShape: RoundSliderThumbShape(//可继承SliderComponentShape自定义形状
//           // disabledThumbRadius: 15, //禁用是滑块大小
//           enabledThumbRadius: 6, //滑块大小
//         ),
//         trackHeight: 2 //进度条宽度
//       ),
//       child: Slider(
//         value: _progress_video,
//         onChanged: (res) {
//           setState(() {
//             _progress_video = double.parse(res.toStringAsFixed(2));
//           });
//         },
//         onChangeEnd: (res) {
//           //拖动后的进度条_nowPro
//           var _nowPro = double.parse(res.toStringAsFixed(2));
//           var _num = _totalDuration * (_nowPro/100);
//           player.seekTo(_num.toInt()*1000);
//         },
//         max: 100,
//         min: 0,
//       ),
//     );
//   }

//   //全屏和非全屏播放且播放控件隐藏情况下在视频最下边显示播放进度，全屏和非全屏通用一个
//   Widget _progressBottomView(){
//     return SliderTheme( //自定义风格
//       data: SliderTheme.of(context).copyWith(
//         activeTrackColor: Color(0xffFF7F50), //进度条滑块左边颜色
//         inactiveTrackColor: Colors.transparent, //进度条滑块右边颜色
//         trackShape: RoundSliderTrackShape(radius: 0),//进度条形状,这边自定义两头显示圆角
//         thumbColor: Colors.yellow, //滑块颜色
//         overlayColor: Colors.transparent, //滑块拖拽时外圈的颜色
//         overlayShape: RoundSliderOverlayShape(//可继承SliderComponentShape自定义形状
//           overlayRadius: 0, //滑块外圈大小
//         ),
//         thumbShape: RoundSliderThumbShape(//可继承SliderComponentShape自定义形状
//           disabledThumbRadius: 0, //禁用是滑块大小
//           enabledThumbRadius: 0, //滑块大小
//         ),
//         inactiveTickMarkColor: Colors.black,
//         showValueIndicator: ShowValueIndicator.onlyForDiscrete,//气泡显示的形式
//         valueIndicatorColor: Colors.red,//气泡颜色
//         valueIndicatorShape: PaddleSliderValueIndicatorShape(),//气泡形状
//         valueIndicatorTextStyle: TextStyle(color: Colors.black),//气泡里值的风格
//         trackHeight: 1.5 //进度条宽度
//       ),
//       child: Slider(
//         value: _progress_video,
//         onChanged: (v) {},
//         max: 100,
//         min: 0,
//       ),
//     );
//   }

//   //缓冲进度条,播放控件隐藏情况下在视频最下边显示播放进度
//   Widget _bufferprogressBottomView(){
//     return SliderTheme( //自定义风格
//       data: SliderTheme.of(context).copyWith(
//         activeTrackColor: Colors.white60, //进度条滑块左边颜色
//         inactiveTrackColor: Colors.transparent, //进度条滑块右边颜色
//         trackShape: RoundSliderTrackShape(radius: 0),//进度条形状,这边自定义两头显示圆角
//         thumbColor: Colors.yellow, //滑块颜色
//         overlayColor: Colors.transparent, //滑块拖拽时外圈的颜色
//         overlayShape: RoundSliderOverlayShape(//可继承SliderComponentShape自定义形状
//           overlayRadius: 0, //滑块外圈大小
//         ),
//         thumbShape: RoundSliderThumbShape(//可继承SliderComponentShape自定义形状
//           disabledThumbRadius: 0, //禁用是滑块大小
//           enabledThumbRadius: 0, //滑块大小
//         ),
//         inactiveTickMarkColor: Colors.black,
//         showValueIndicator: ShowValueIndicator.onlyForDiscrete,//气泡显示的形式
//         valueIndicatorColor: Colors.red,//气泡颜色
//         valueIndicatorShape: PaddleSliderValueIndicatorShape(),//气泡形状
//         valueIndicatorTextStyle: TextStyle(color: Colors.black),//气泡里值的风格
//         trackHeight: 1.5 //进度条宽度
//       ),
//       child: Slider(
//         value: _buffer_progress_video,
//         onChanged: (v) {},
//         max: 100,
//         min: 0,
//       ),
//     );
//   }

//   /**分割线
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//    */
//   //全屏UI
//   Widget _fullVideoUI(){
//     return GestureDetector(
//       behavior: HitTestBehavior.translucent,
//       onTap: (){
//         //当视频播放完成、播放出错、视频被删除、视频正在加载(缓冲中)，此时单击或双击屏幕不起作用
//         if(_isCompleted || _isVideoError || _isVideoDel || _isLoading)return;
//         startCoundTimeFull(1);
//         getDeviceTime();
//         // setState(() {
//         //   _fullShowControl = true;
//         // });
//       },
//       onDoubleTap: (){
//         //当视频播放完成、播放出错、视频被删除、视频正在加载(缓冲中)，此时单击或双击屏幕不起作用
//         if(_isCompleted || _isVideoError || _isVideoDel || _isLoading)return;
//         _playing ? player.pause() : player.start();
//       },
//       /**横向滑动start */
//       onHorizontalDragStart: (val) {
//         if(_isGesture && !widget.isLive) {
//           int _start0X = int.parse(val.globalPosition.dx.toStringAsFixed(0));
          
//           setState(() {
//             _startCoordinate = _start0X;
//             _isType = 1;
//           });
//         }
//       },
//       onHorizontalDragUpdate: (val) {
//         if(_isGesture && !widget.isLive) {
//           int _upX = int.parse(val.globalPosition.dx.toStringAsFixed(0)) - _startCoordinate;
//           int _rsNum = _upX * _totalDuration + _inMilliseconds;
//           setState(() {
//             _slideLength = _rsNum;
//             _goOrQuit = _upX > 0 ? true : false;
//           });
//         }
//       },
//       onHorizontalDragEnd: (val) {
//         if(_isGesture && !widget.isLive) {
//           player.seekTo(_slideLength);
//           player.start();
//           setState(() {
//             _isType = 9;
//           });
//         }
//       },
//       /**横向滑动end */

//       /**竖向滑动start */
//       onVerticalDragStart: (val) {
//         if(_isGesture) {
//           var _width = MediaQuery.of(context).size.width;
//           double _isX = val.globalPosition.dx;                                 //判定点_isX，如果_isX < 180则表示滑动了左半边, 否则如果大于手机高度减去_soundX，则表示滑动了右边
//           var _isY = int.parse(val.globalPosition.dy.toStringAsFixed(0));      //手指触摸屏幕起点Y坐标
//           if(_isX < _soundX) {
//             setState(() {
//               _startCoordinateY = _isY;
//               _isType = 2;
//             });
//           }
//           if(_isX > (_width - _soundX)) {
//             _startCoordinateY = _isY;
//             _isType = 3;
//           }
//         }
//       },
//       onVerticalDragUpdate: (val) {
//         if(_isGesture) {
//           var _num = int.parse(val.globalPosition.dy.toStringAsFixed(0));
//             var _text = (_startCoordinateY -_num);
//             var _rtext;
//             if(_isType == 2) {
//               _rtext = _videoVolume + _text;
//             } else if(_isType == 3){
//               _rtext = _videoLight + _text;
//             }
//             var _v = (_rtext / 10000).toDouble();
//             if(_rtext > 10000) {
//               _rtext = 10000;
//             } else if(_v < 0) {
//               _rtext = 0;
//             }
//             if(_v > 1) {
//               _v = 1.0;
//             } else if(_v < 0) {
//               _v = 0.0;
//             }
            
//             if(_isType == 2) {
//               setState(() {
//                 _videoVolume = _rtext;
//                 _endVolume = _v;
//                 _soundProgress = double.parse((_v * 100).toStringAsFixed(0));
//               });
//               setVolume();
//             } else if(_isType == 3) {
//               setState(() {
//                 _videoLight = _rtext;
//                 _endLight = _v;
//                 _lightProgress = double.parse(_v.toStringAsFixed(2)) * 100;
//               });
//               setBrightness();
//             }
//         }
//       },
//       onVerticalDragEnd: (val) {
//         if(_isGesture) {
//           setState(() {
//             _isType = 9;
//           });
//         }
//       },
//       /**竖向滑动end */
//       child: Container(
//         width: double.infinity,
//         height: double.infinity,
//         color: _fullShowControl ? Color.fromARGB(100, 0, 0, 0) : Colors.transparent,
//         child: Stack(
//           children: <Widget>[
//             //显示全屏UI控制器
//             _fullShowControl
//             ? Stack(
//               children: <Widget>[
//                 Positioned(
//                   top: 0,
//                   left: 0,
//                   right: 0,
//                   bottom: 0,
//                   child: _videoPlayOrPause()
//                 ),
//                 Positioned(
//                   top: 0,
//                   left: 0,
//                   right: 0,
//                   child: Container(
//                     child: Row(
//                       children: <Widget>[
//                         GestureDetector(
//                           behavior: HitTestBehavior.translucent,
//                           onTap: (){
//                             if (orientation == Orientation.landscape) {
//                               portraitUp();
//                               return false;
//                             }
//                           },
//                           child: Container(
//                             width: ScreenUtil().getWidthPx(100),
//                             height: ScreenUtil().getHeightPx(110),
//                             padding: EdgeInsets.only(left: ScreenUtil().getWidthPx(20)),
//                             alignment: Alignment.centerLeft,
//                             color: Colors.transparent,
//                             child: Icon(IconData(0xe632, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(21)),
//                           ),
//                         ),
//                         Expanded(
//                           flex: 10,
//                           child: Container(
//                             width: double.infinity,
//                             height: ScreenUtil().getHeightPx(90),
//                             alignment: Alignment.centerLeft,
//                             child: Text('${widget.title}',overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 15, color: Colors.white),),
//                           ),
//                         ),
//                         Expanded(
//                           flex: 1,
//                           child: GestureDetector(
//                             behavior: HitTestBehavior.translucent,
//                             onTap: (){
//                               logger.d('点击全屏更多');
//                             },
//                             child: Container(
//                               width: ScreenUtil().getWidthPx(100),
//                               height: ScreenUtil().getHeightPx(110),
//                               padding: EdgeInsets.only(left: ScreenUtil().getWidthPx(20)),
//                               alignment: Alignment.center,
//                               color: Colors.transparent,
//                               child: Cmtext("${hourTime}:${minTime}", style: TextStyle(color: Colors.white),),
//                               // child: Icon(IconData(0xe73a, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(21)),
//                             ),
//                           ),
//                         )
//                       ],
//                     ),
//                   ),
//                 ),
//                 Positioned(
//                   bottom: 0,
//                   left: 0,
//                   right: 0,
//                   child: Container(
//                     height: ScreenUtil().getHeightPx(80),
//                     child: Row(
//                       children: <Widget>[
//                         Expanded(
//                           flex: 25,
//                           child: 
//                           !widget.isLive ?
//                           Container(
//                             padding: EdgeInsets.only(left: ScreenUtil().getWidthPx(30)),
//                             alignment: Alignment.centerLeft,
//                             child: Text('${_inMinutes}:${_inSeconds}', style: TextStyle(color: Colors.white,fontSize: 14),),
//                           )
//                           : GestureDetector(
//                             behavior: HitTestBehavior.translucent,
//                             onTap: (){
//                               _playing ? player.pause() : player.start();
//                             },
//                             child: Container(
//                               margin: EdgeInsets.only(bottom: ScreenUtil().getHeightPx(6)),
//                               alignment: Alignment.center,
//                               child: Icon(IconData(_playing ? 0xe6cf : 0xe6ce, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(18)),
//                             ),
//                           ),
//                         ),
//                         Expanded(
//                           flex: 190,
//                           child: Container(
//                             child: !widget.isLive ? _progressView() : Text('')
//                           ),
//                         ),
//                         Expanded(
//                           flex: 25,
//                           child: Container(
//                             alignment: Alignment.center,
//                             child: !widget.isLive ? Text('${_videoDuration}', style: TextStyle(color: Colors.white,fontSize: 14),) : Text(''),
//                           ),
//                         ),
//                         Expanded(
//                           flex: 20,
//                           child: InkResponse(
//                             // behavior: HitTestBehavior.opaque,
//                             onTap: () async {
//                               if(widget.isNext) {
//                                 widget.nextEpisode();
//                                 LogUtil.e('切换后播放地址是: ${widget.url}');
//                                 await Future.delayed(Duration(milliseconds: 500));
//                                 switchPlayData(url: widget.url);
//                               } else {
//                                 CpToast('已经是最后一集');
//                               }
//                             },
//                             // key: _distinctKey,
//                             child: Container(
//                               alignment: Alignment.center,
//                               color: Colors.transparent,
//                               child: Text('下集', style: TextStyle(color: widget.isNext ? Colors.white : Color(0xff666666),fontSize: 15),),
//                             ),
//                           )
//                         ),
//                         !widget.isLive
//                         ? Expanded(
//                           flex: 20,
//                           child: GestureDetector(
//                             behavior: HitTestBehavior.opaque,
//                             onTap: (){
//                               logger.d('选择倍速');
//                               _showMoreMenu(2);
//                             },
//                             key: _speedKey,
//                             child: Container(
//                               alignment: Alignment.center,
//                               color: Colors.transparent,
//                               child: Text('倍速', style: TextStyle(color: Colors.white,fontSize: 15),),
//                             ),
//                           )
//                         )
//                         : Container(),
//                         Expanded(
//                           flex: 20,
//                           child: GestureDetector(
//                             behavior: HitTestBehavior.opaque,
//                             onTap: (){
//                               if (orientation == Orientation.landscape) {
//                                 portraitUp();
//                                 return false;
//                               }
//                             },
//                             child: Container(
//                               padding: EdgeInsets.only(right: ScreenUtil().getWidthPx(30)),
//                               margin: EdgeInsets.only(bottom: ScreenUtil().getHeightPx(6)),
//                               color: Colors.transparent,
//                               alignment: Alignment.centerRight,
//                               child: Icon(IconData(0xe661, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(18)),
//                             ),
//                           )
//                         ),
//                       ],
//                     ),
//                   ),
//                 ),
//               ],
//             )
//             : Container(),
//             Positioned(
//               top: 0,
//               left: 0,
//               right: 0,
//               bottom: 0,
//               child: Center(
//                 child: _centerView()
//               )
//             ),
//             //播放错误
//             Positioned(
//               top: 0,
//               bottom: 0,
//               left: 0,
//               right: 0,
//               child: _videoErrorOrDel()
//             ),
//             //加载中
//             _isLoading
//             ? Positioned(
//               top: 0,
//               bottom: 0,
//               left: 0,
//               right: 0,
//               child: Container(
//                 width: 40,
//                 height: 40,
//                 child: SpinKitDualRing(color: Colors.white54,size: 30, lineWidth: 2),
//               )
//             )
//             : Container(),
//             //缓冲进度
//             !widget.isLive
//             ? Positioned(
//               left: 0,
//               right: 0,
//               bottom: 0,
//               child: !_fullShowControl ? _bufferprogressBottomView() : Text(''),
//             )
//             : Container(),
//             //播放进度
//             !widget.isLive
//             ? Positioned(
//               left: 0,
//               right: 0,
//               bottom: 0,
//               child: !_fullShowControl ? _progressBottomView() : Text(''),
//             )
//             : Container()
//           ],
//         )
//       )
//     );
    
//   }

//   //播放状态(播放完成)全屏, 可以定义更多UI样式
//   Widget _videoFullComplete(){
//     return Container(
//       alignment: Alignment.center,
//       child: GestureDetector(
//         behavior: HitTestBehavior.translucent,
//         onTap: (){
//           setState(() {
//             // _isPlay = !_isPlay;
//           });
//           logger.d('点击重播');
//           // controller.playOrPause();
//         },
//         child: Column(
//           mainAxisAlignment: MainAxisAlignment.center,
//           children: <Widget>[
//             Container(
//               width: ScreenUtil().getWidthPx(90),
//               height: ScreenUtil().getWidthPx(90),
//               decoration: BoxDecoration(
//                 color: Color.fromARGB(100, 0, 0, 0),
//                 borderRadius: BorderRadius.all(Radius.circular(45)),
//               ),
//               child: Icon(IconData(0xe782, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(22)),
//             ),
//             SizedBox(height: 2),
//             Text('重播',style: TextStyle(color: Colors.white, fontSize: 14),)
//           ],
//         )
//       ),
//     );
//   }

//   _showMoreMenu(index){
//     if(_timer != null) {
//       _timer.cancel();
//       setState(() {
//         _fullShowControl = true;
//         _timer = null;
//       });
//     }
//     setState(() {
//       _isClear = true;
//     });
//     startCoundTime(2);
    
//     final RenderBox button = index == 1 ? _distinctKey.currentContext.findRenderObject() : _speedKey.currentContext.findRenderObject();
//     final RenderBox overlay = Overlay.of(context).context.findRenderObject();
//     //将y轴的高度减去view高度就得到反方向的容器
//     var a =  button.localToGlobal(Offset(button.size.width + 12.0, button.size.height - 170.0), ancestor: overlay);
//     var b =  button.localToGlobal(button.size.bottomLeft(Offset(0, 12)), ancestor: overlay);
//     final RelativeRect position = RelativeRect.fromRect(
//       Rect.fromPoints(a, b),
//       Offset.zero & overlay.size,
//     );
//     logger.d(position);
//     showPopupWindow(
//       context: context,
//       fullWidth: false,
//       isShowBg: false,
//       position: position,
//       elevation: 0.0,
//       bakFun: _showPopBackFun,
//       child: Container(
//         width: ScreenUtil().getWidthPx(160),
//         height: ScreenUtil().getHeightPx(240),
//         decoration: BoxDecoration(
//           color: Colors.black,
//           borderRadius: BorderRadius.all(Radius.circular(5.0))
//         ),
//         child: Column(
//           children: _clearView(index),
//         ),
//       ),
//     );
//   }

//   List<Widget> _clearView(index){
//     List<Widget> _list = [];
//     List<String> _textList = ["超清", "高清", "标清"];
//     List<double> _speedList = [2.0, 1.5, 1.0];
//     for (var i = 0; i < 3; i++) {
//       Widget _addView = Expanded(
//         flex: 1,
//         child: GestureDetector(
//           behavior: HitTestBehavior.translucent,
//           onTap: (){
//             logger.d('选择${_textList[i]}清晰度');
//             if(index != 1) {
//               player.setSpeed(_speedList[i]);
//             }
//             _showPopBackFun(context);
//           },
//           child: Container(
//             width: double.infinity,
//             alignment: Alignment.center,
//             child: Text(index == 1 ? _textList[i] : '${_speedList[i]}', style: TextStyle(color: Colors.white, fontSize: 14)),
//           ),
//         ),
//       );
//       _list.add(_addView);
//     }
//     return _list;
//   }

//   void _showPopBackFun(context){
//     Navigator.of(context).pop();
//     if(_timer != null) {
//       _timer.cancel();
//     }
//     setState(() {
//       _fullShowControl = false;
//       _timer = null;
//     });
//     return null;
//   }

//   //手势UI
//   Widget _centerView(){
//     if(_isType == 1) {
//       return _videoProessView();
//     } else if(_isType == 2) {
//       return _soundView();
//     } else if(_isType == 3) {
//       return _lightView();
//     }
//   }

//   //快进快退时UI
//   Widget _videoProessView(){
//     return Container(
//       width: 150,
//       height: 120,
//       decoration: BoxDecoration(
//         color: Color.fromRGBO(0, 0, 0, 0.6),
//         borderRadius: BorderRadius.all(Radius.circular(10.0)),
//       ),
//       child: Column(
//         crossAxisAlignment: CrossAxisAlignment.center,
//         mainAxisAlignment: MainAxisAlignment.center,
//         children: <Widget>[
//           SizedBox(height: 10),
//           Expanded(
//             flex: 10,
//             child: Icon(IconData(_goOrQuit ? 0xe65e : 0xe65f, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(28)),
//           ),
//           Expanded(
//             flex: 10,
//             child: Row(
//               mainAxisAlignment: MainAxisAlignment.center,
//               children: <Widget>[
//                 Text('${fitTimerCommon(_slideLength)}', style: TextStyle(color: Colors.redAccent,fontSize: 15)),
//                 Text(' / ', style: TextStyle(color: Colors.white,fontSize: 15)),
//                 Text('$_videoDuration', style: TextStyle(color: Colors.white,fontSize: 15)),
//               ],
//             ),
//           ),
//           SizedBox(height: 10),
//         ],
//       ),
//     );
//   }

//   //手势声音UI
//   Widget _soundView(){
//     return Container(
//       width: 150,
//       height: 60,
//       decoration: BoxDecoration(
//         color: Color.fromRGBO(0, 0, 0, 0.6),
//         borderRadius: BorderRadius.all(Radius.circular(10.0)),
//       ),
//       child: Row(
//         crossAxisAlignment: CrossAxisAlignment.center,
//         mainAxisAlignment: MainAxisAlignment.center,
//         children: <Widget>[
//           Icon(IconData(0xe64c, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(23)),
//           SizedBox(width: 10,),
//           Container(
//             width: 100,
//             child: _soundProgressView(),
//           )
//         ],
//       ),
//     );
//   }

//   //手势声音UI Slide
//   Widget _soundProgressView(){
//     return SliderTheme( //自定义风格
//       data: SliderTheme.of(context).copyWith(
//         activeTrackColor: Color(0xfff85959), //进度条滑块左边颜色
//         inactiveTrackColor: Colors.white54, //进度条滑块右边颜色
//         trackShape: RoundSliderTrackShape(radius: 3),//进度条形状,这边自定义两头显示圆角
//         thumbColor: Colors.yellow, //滑块颜色
//         overlayColor: Colors.transparent, //滑块拖拽时外圈的颜色
//         overlayShape: RoundSliderOverlayShape(//可继承SliderComponentShape自定义形状
//           overlayRadius: 0, //滑块外圈大小
//         ),
//         thumbShape: RoundSliderThumbShape(//可继承SliderComponentShape自定义形状
//           disabledThumbRadius: 0, //禁用是滑块大小
//           enabledThumbRadius: 0, //滑块大小
//         ),
//         inactiveTickMarkColor: Colors.black,
//         showValueIndicator: ShowValueIndicator.onlyForDiscrete,//气泡显示的形式
//         valueIndicatorColor: Colors.red,//气泡颜色
//         valueIndicatorShape: PaddleSliderValueIndicatorShape(),//气泡形状
//         valueIndicatorTextStyle: TextStyle(color: Colors.black),//气泡里值的风格
//         trackHeight: 4 //进度条宽度
//       ),
//       child: Slider(
//         value: _soundProgress,
//         onChanged: (v) {},
//         max: 100,
//         min: 0,
//       ),
//     );
//   }

//   //手势亮度UI
//   Widget _lightView(){
//     return Container(
//       width: 150,
//       height: 60,
//       decoration: BoxDecoration(
//         color: Color.fromRGBO(0, 0, 0, 0.6),
//         borderRadius: BorderRadius.all(Radius.circular(10.0)),
//       ),
//       child: Row(
//         crossAxisAlignment: CrossAxisAlignment.center,
//         mainAxisAlignment: MainAxisAlignment.center,
//         children: <Widget>[
//           Icon(IconData(0xe748, fontFamily: Constants.IconFontFamily),color: Colors.white ,size: ScreenUtil().getSp(25)),
//           SizedBox(width: 10,),
//           Container(
//             width: 100,
//             child: _lightProgressView(),
//           )
//         ],
//       ),
//     );
//   }

//   //手势亮度UI Slide
//   Widget _lightProgressView(){
//     return SliderTheme( //自定义风格
//       data: SliderTheme.of(context).copyWith(
//         activeTrackColor: Color(0xfff85959), //进度条滑块左边颜色
//         inactiveTrackColor: Colors.white54, //进度条滑块右边颜色
//         trackShape: RoundSliderTrackShape(radius: 3),//进度条形状,这边自定义两头显示圆角
//         thumbColor: Colors.yellow, //滑块颜色
//         overlayColor: Colors.transparent, //滑块拖拽时外圈的颜色
//         overlayShape: RoundSliderOverlayShape(//可继承SliderComponentShape自定义形状
//           overlayRadius: 0, //滑块外圈大小
//         ),
//         thumbShape: RoundSliderThumbShape(//可继承SliderComponentShape自定义形状
//           disabledThumbRadius: 0, //禁用是滑块大小
//           enabledThumbRadius: 0, //滑块大小
//         ),
//         inactiveTickMarkColor: Colors.black,
//         showValueIndicator: ShowValueIndicator.onlyForDiscrete,//气泡显示的形式
//         valueIndicatorColor: Colors.red,//气泡颜色
//         valueIndicatorShape: PaddleSliderValueIndicatorShape(),//气泡形状
//         valueIndicatorTextStyle: TextStyle(color: Colors.black),//气泡里值的风格
//         trackHeight: 4 //进度条宽度
//       ),
//       child: Slider(
//         value: _lightProgress,
//         onChanged: (v) {},
//         max: 100,
//         min: 0,
//       ),
//     );
//   }

//   /**毫秒转化为时间 */
//   dynamic fitTimerCommon(int time, {int type}){
//     String _callTime;
//     var _minutes = (time / 1000 ~/ 60).toStringAsFixed(0);
//     var _second = (time / 1000 % 60).toStringAsFixed(0);
//     _minutes = int.parse(_minutes) < 10 ? '0' + _minutes : _minutes;
//     _second = int.parse(_second) < 10 ? '0' + _second : _second;
//     _callTime = _minutes + ':' + _second;
//     return _callTime;
//   }

//   Future<void> setVolume() async{
//     player.setVolume(_endVolume);
//   }

//   Future<void> setBrightness() async{
//     Screen.setBrightness(_endLight);
//   }

//   /**
//    * 播放完成后做其它动作，比如退出全屏，显示播放完成样式, 这里要做一个延时，不然对UI会有影响
//    */
//   void _videoCompleted() async {
//     await Future.delayed(Duration(milliseconds: 100));
//     if(_isFull) {
//         //播放完成后退出全屏
//         portraitUp();
//       }
//     setState(() {
//       _progress_video = 99.9;
//       _isCompleted = true;
//       _showControl = false;
//     });
//   }

//   //全屏
//   videoFullScreen() async {
//     player.enterFullScreen();
//     // SystemChrome.setPreferredOrientations([
//     //   DeviceOrientation.landscapeLeft,
//     //   DeviceOrientation.landscapeLeft,
//     // ]);
//   }

//   //退出全屏
//   portraitUp() async {
//     player.exitFullScreen();
//     SystemChrome.setPreferredOrientations([
//       DeviceOrientation.portraitUp,
//     ]);
//   }

//   /**
//    * 开始缓存倒计时
//    */
//   startRecordTimer() async {
//     await Future.delayed(Duration(seconds: 10));
//     if(mounted){
//       saveRecordTimer();
//     }
//   }

//   /**
//    * 获取当前时间
//    */
//   getDeviceTime(){
//     //创建时间对象，获取当前时间
//     DateTime now = new DateTime.now();
//     setState(() {
//       hourTime = now.hour > 10 ? now.hour.toString() : "0"+now.hour.toString();
//       minTime = now.minute > 10 ? now.minute.toString() : "0"+now.minute.toString();
//     });
//   }

//   /**
//    * 保存记录,每30秒保存一次
//    */
//   saveRecord() async {
//     List arrs = [];
//     Map<String, dynamic> _reData = {
//       "vodId": widget.data.vodId,
//       "typeId1": widget.data.typeId1,
//       "vodPic": widget.data.vodPic,
//       "vodName": widget.data.vodName,
//       "vodArea": widget.data.vodArea,
//       "vodActor": widget.data.vodActor,
//       "setNum": widget.setNum,
//       "min": _inMinutes,
//       "second": _inSeconds,
//     };
//     List _getDatas = SpUtil.getObjectList("historyRecord");
    
//     if(_getDatas != null && _getDatas.length > 0) {
//       bool _isSame = false;
//       int _idx;
//       for (var i = 0; i < _getDatas.length; i++) {
//         if(_getDatas[i]['vodId'] == widget.data.vodId) {
//           _isSame = true;
//           _idx = i;
//         }
//       }
//       if(_isSame) {
//         _getDatas.removeAt(_idx);
//       }
//       arrs = _getDatas;
//       arrs.insert(0, _reData);
//       SpUtil.putObjectList("historyRecord", arrs);
//       // CpToast('保存成功');
//     } else {
//       arrs.add(_reData);
//       SpUtil.putObjectList("historyRecord", arrs);
//       // CpToast('保存成功');
//     }
//   }

//   void saveRecordTimer() {
//     const oneSec = Duration(seconds: 1);
//     var callback = (timer) => {
//       setState(() {
//         if (_saveCountTime == 0) {
//           saveRecord();
//           setState(() {
//             _saveCountTime = 10;
//           });
//         } else {
//           _saveCountTime = _saveCountTime - 1;
//         }
//       })
//     };

//     _saveTimer = Timer.periodic(oneSec, callback);
//   }
// }
